package com.zmn.plat.services.interfaces.servcategory;

import java.util.List;

import com.zmn.plat.model.entity.servcategory.ShowCategoryAssociation;
import com.zmn.plat.model.entity.servcategory.ShowCategoryAssociationQuery;
import com.zmn.plat.model.entity.servcategory.ShowCategoryAssociationVO;

/**
 * @author linfeng
 * @description
 * @since 2019/9/20 11:20
 * @modifier tanghongjun
 **/
public interface ShowCategoryAssociationService {
    /**
     * 描述: ShowCategoryAssociation key 查询数据
     *
     * @param relationId
     * @return: ShowCategoryAssociation
     * @auther: tanghongjun
     * @since: 2019/9/21 16:41
     */
    ShowCategoryAssociation findByKey(Integer relationId);

    /**
     * 描述:查询最大key
     *
     * @return: relationId
     * @auther: tanghongjun
     * @since: 2019/9/21 16:41
     */
    Integer findKeyForMax();

    /**
     * 描述: 根据查询条件分页查询
     *
     * @param query
     * @return: List<ShowCategoryAssociation>
     * @auther: tanghongjun
     * @since: 2019/9/21 16:41
     */
    List<ShowCategoryAssociation> listPageByQuery(ShowCategoryAssociationQuery query);

    /**
     * 描述: 根据查询条件查询所有数据
     *
     * @param query
     * @return: List<ShowCategoryAssociation>
     * @auther: tanghongjun
     * @since: 2019/9/21 16:41
     */
    List<ShowCategoryAssociation> listByQuery(ShowCategoryAssociationQuery query);

    /**
     * 描述：根据前台二级分类ID查询关联的服务分类(服务分类状态和计价器状态都为开启)
     * 
     * @param showCategId
     * @auther linfeng
     * @return
     */
    List<ShowCategoryAssociationVO> listServCategByShowCategId(Integer showCategId);

    /**
     * 描述: 查询渠道开通的服务分类
     *     备注： 查询的服务分类其后台服务id能关联到前台服务id(前后台服务分类关联了)
     *
     * @param channelId channelId
     * @param showType showType
     * @return java.util.List<Integer>
     * @author jiafei
     * @since 2021/6/25 9:41
     */
    List<ShowCategoryAssociation> listByChannelAndShowType(Integer channelId, Integer showType);

    /**
     * 描述: ShowCategoryAssociation 数据
     *
     * @return: List<ShowCategoryAssociation>
     * @auther: tanghongjun
     * @since: 2019/9/21 16:41
     */
    List<ShowCategoryAssociation> listAll();

    /**
     * 描述: 根据查询条件统计满足条件的数据条数
     *
     * @param query
     * @return: Integer
     * @auther: tanghongjun
     * @since: 2019/9/21 16:41
     */
    Integer countByQuery(ShowCategoryAssociationQuery query);

    /**
     * 描述: 根据主键修改数据
     *
     * @param showCategoryAssociation
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2019/9/21 16:41
     */
    Integer updateByKey(ShowCategoryAssociation showCategoryAssociation);

    /**
     * 描述: 新增数据
     *
     * @param showCategoryAssociation
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2019/9/21 16:41
     */
    Integer insert(ShowCategoryAssociation showCategoryAssociation);

    /**
     * 批量插入前后台产品关联关系
     *
     * @param showCategoryAssociationList
     * @return
     */
    Integer insertBatch(List<ShowCategoryAssociation> showCategoryAssociationList);

    /**
     * 描述: 根据主键删除数据
     *
     * @param relationId
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2019/9/21 16:41
     */
    Integer deleteByKey(Integer relationId);

    /**
     * 根据前台服务id,前台以及产品id,前台二级产品id删除对应后台关联的关联关系
     *
     * @param showServCategId
     * @param showCategOneId
     * @param showCategId
     * @return
     */
    Integer deleteByShowServId(Integer showServCategId, Integer showCategOneId, Integer showCategId);

    /**
     * 描述: 根据前台分类ID查询前台分类关联关系，参数不能同时为空
     *
     * @param showServCategId
     *            前台服务分类ID
     * @param showCategOneId
     *            前台一级产品分类ID
     * @param showCategId
     *            前台二级产品分类ID
     * @return List<ShowCategoryAssociationVO> 前后台关联关系，以及其分类名称实体集合
     * @auther tanghongjun
     * @since 2019/9/21 11:20
     */
    List<ShowCategoryAssociationVO> listByShowCategoryId(Integer showServCategId, Integer showCategOneId, Integer showCategId);

    /**
     * 描述: 根据后台分类ID查询后台分类关联关系，参数不能同时为空
     *
     * @param servCategId
     *            后台服务分类ID
     * @param categOneId
     *            后台一级产品分类ID
     * @param categId
     *            后台二级产品分类ID
     * @return List<ShowCategoryAssociationVO> 前后台关联关系，以及其分类名称实体集合
     * @auther linfeng
     * @since 2020/04/21 11:20
     */
    List<ShowCategoryAssociationVO> listByCategoryId(Integer servCategId, Integer categOneId, Integer categId);

    /**
     * 通过前台服务分类ID-一级分类ID-二级分类ID批量删除前后台关联关系
     *
     * @param ids
     * @return
     */
    Integer deleteByServCategIdAndCategOneIdAndCategId(String[] ids);

    /**
     * 通过后台服务分类ID-一级分类ID-二级分类ID批量删除前后台关联关系
     *
     * @param ids
     * @return
     */
    Integer deleteByShowServCategIdAndShowCategOneIdAndShowCategId(String[] ids);
}
